#include <string.h>
#include <unistd.h>
#include <math.h>
#include "los_task.h"
#include "ohos_init.h"
#include "lz_hardware.h"
#include "keyScan.h"

// fish
#define GPIO_TEST GPIO0_PB3
#define GPIO_TEST2 GPIO0_PB2
// fire
#define GPIO_TEST3 GPIO0_PC1
#define GPIO_TEST4 GPIO0_PC2

#define GPIO_TEST5 GPIO0_PB5

unsigned int ret;
unsigned int ret1;

/***************************************************************
 * 函数名称: gpio_process
 * 说    明: gpio任务
 * 参    数: 无
 * 返 回 值: 无
 ***************************************************************/
void door_process()
{
    uint8_t password;
    unsigned int port = 0;
    unsigned short duty = 10; // 初始占空比设置为10%
    unsigned int freq = 50;

    LzGpioInit(GPIO_TEST);
    PinctrlSet(GPIO_TEST, MUX_FUNC0, PULL_UP, DRIVE_LEVEL0);
    LzGpioSetDir(GPIO_TEST, LZGPIO_DIR_IN);

    LzGpioInit(GPIO_TEST2);
    PinctrlSet(GPIO_TEST2, MUX_FUNC0, PULL_UP, DRIVE_LEVEL0);
    LzGpioSetDir(GPIO_TEST2, LZGPIO_DIR_OUT);

    LzGpioInit(GPIO_TEST3);
    PinctrlSet(GPIO_TEST3, MUX_FUNC0, PULL_UP, DRIVE_LEVEL0);
    LzGpioSetDir(GPIO_TEST3, LZGPIO_DIR_IN);

    LzGpioInit(GPIO_TEST4);
    PinctrlSet(GPIO_TEST4, MUX_FUNC0, PULL_UP, DRIVE_LEVEL0);
    LzGpioSetDir(GPIO_TEST4, LZGPIO_DIR_OUT);
    LzGpioSetVal(GPIO_TEST4, 1);

    LzGpioInit(GPIO_TEST5);
    PinctrlSet(GPIO_TEST5, MUX_FUNC0, PULL_NONE, DRIVE_LEVEL0);
    LzGpioSetDir(GPIO_TEST5, LZGPIO_DIR_OUT);
    LzGpioSetVal(GPIO_TEST5, 1);
    printf("nihao\n",0);
    ret1 = IoTPwmInit(port, 10, 50);
    ret1 = IoTPwmStart(port, 10, 50);
    key_Init();
    while (true)
    {
        ret = 0;
        LzGpioValue value;
        int key;
        key = getKeyVal();
        printf("keyvalue:%d\n",key);
        if (key == 16)
        {
            ret1 = IoTPwmStart(port, 5, 50);
            LOS_Msleep(3000);
            ret1 = IoTPwmStart(port, 10, 50);
            printf("ture\n",0);
        }
        else
        {
            printf("false\n",0);
        }

        LzGpioValue value23;
        LzGpioGetVal(GPIO_TEST, &value23);
        printf("GPIO_TEST %d\r\n", value23);
        if (value23 == 0)
        {
            LzGpioSetVal(GPIO_TEST2, 1);
            LzGpioSetVal(GPIO_TEST5, 1);
        }
        else
        {
            LzGpioSetVal(GPIO_TEST2, 0);
            LzGpioSetVal(GPIO_TEST5, 0);
        }

        LzGpioGetVal(GPIO_TEST2, &value23);
        printf("GPIO_TEST2 %d\r\n", value23);
        LzGpioGetVal(GPIO_TEST3, &value23);
        printf("GPIO_TEST3 %d\r\n", value23);
        if (value23 == 1)
        {
            LzGpioSetVal(GPIO_TEST4, 1);
            LzGpioSetVal(GPIO_TEST5, 1);
        }
        else
        {
            LzGpioSetVal(GPIO_TEST4, 0);
            LzGpioSetVal(GPIO_TEST5, 0);
        }
        LzGpioGetVal(GPIO_TEST4, &value23);
        printf("GPIO_TEST4 %d\r\n", value23);
        LOS_Msleep(100);
    }
}

/***************************************************************
 * 函数名称: gpio_example
 * 说    明: 开机自启动调用函数
 * 参    数: 无
 * 返 回 值: 无
 ***************************************************************/
void door_example()
{
    unsigned int thread_id;
    TSK_INIT_PARAM_S task = {0};
    unsigned int ret = LOS_OK;

    task.pfnTaskEntry = (TSK_ENTRY_FUNC)door_process;
    task.uwStackSize = 2048;
    task.pcName = "door process";
    task.usTaskPrio = 24;
    ret = LOS_TaskCreate(&thread_id, &task);
    if (ret != LOS_OK)
    {
        printf("Falied to create task ret:0x%x\n", ret);
        return;
    }
}

APP_FEATURE_INIT(door_example);